//
//  UIImage+BizExtension.h
//  MWGX-Customer
//
//  Created by CoolCamel on 17/3/31.
//  Copyright © 2017年 www.meiweigx.com. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, GradientType) {

GradientTypeTopToBottom = 0,//从上到下

GradientTypeLeftToRight = 1,//从左到右

GradientTypeUpleftToLowright = 2,//左上到右下

GradientTypeUprightToLowleft = 3,//右上到左下

};

@interface UIImage (BizExtension)
/**
 *  将图片旋转给定的角度
 *
 *  @param degrees 角度，正数代表反时针，负数代表顺时针
 *
 *  @return 旋转后的图片
 */
- (UIImage*)imageRotatedByDegrees:(CGFloat)degrees;

/**
 *  根据给定的高度来确定图片的新尺寸
 *
 *  @param height 高度
 *
 *  @return 变化后的图片
 */
-(CGSize) imageGetSizeWithHeight:(CGFloat) height;

/**
 *  根据给定的宽度来确定图片的新尺寸
 *
 *  @param width 宽度
 *
 *  @return 变化后的图片
 */
-(CGSize) imageGetSizeWithWidth:(CGFloat) width;

/**
 *  获取最合适size区域的图片尺寸,(如，宽，高，都不能超过指定size的宽高)
 *
 *  @param size 指定size
 *
 *  @return 最佳尺寸
 */
-(CGSize) imageFillSizeWithRect:(CGSize) size;
#pragma mark -
#pragma mark 图片截取相关
/*
 对原来的图片的大小进行处理
 @param image 要处理的图片
 @param size  处理过图片的大小
 */
-(UIImage *)OriginImageScaleToSize:(CGSize)size;
/**
 *  图片放大缩小
 *
 *  @param scale 放大缩小倍数
 *
 *  @return 放大缩小后的图片
 */
-(UIImage *) getImageWithScale:(float) scale;

/**
 *  截取图片中某块区域
 *
 *  @param rect 截取区域
 *
 *  @return 指定区域的图片
 */
-(UIImage *) takeSubImagewithRect:(CGRect) rect;

/**
 *  切取圆形图片，指定区域的圆形
 *
 *  @param start  圆心
 *  @param radius 半径
 *
 *  @return 切取后的图片
 */
-(UIImage *) takeArcImageWithStart:(CGPoint) start widthRadius:(CGFloat) radius;

/**
 *  截取图片中心点，指定半径的图片
 *
 *  @param radius 指定半径
 *
 *  @return 图片
 */
-(UIImage *) takeArcImageWithRadius:(CGFloat) radius;

#pragma mark -
#pragma mark 图片，颜色相关
/**
 *  绘制颜色的背景图片
 *
 *  @param color 颜色
 *  @param size  边框
 *
 *  @return 返回新的图片
 */
+(UIImage *) imageWithColor:(UIColor *) color size:(CGSize) size;

/**
 根据文字生成一个tag图片
 
 @param text 文字
 @param textAttr 文字属性
 @return 图片
 */
+ (UIImage *)imageWithText:(NSString *)text textAttr:(NSDictionary *)textAttr;

/**
 *  为图片着色
 *
 *  @param color     颜色
 *  @param blendMode 混合模式
 *
 *  @return 新的图片
 */
-(UIImage *) tintColorWith:(UIColor *) color blendMode:(CGBlendMode) blendMode;
/**
 *  更具渐变色生成图片呢
 *
 *  @param colors     颜色数组
 *  @param gradientType 渐变方向
 *  @param imgSize 渐变大小
 *
 *  @return 新的图片
 */
+ (UIImage *)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize;
/**
 *  图片中某一像素的颜色值
 *
 *  @param point 像素点的位置
 *
 *  @return 颜色值
 */
-(UIColor *) imagePixelColorWithPoint:(CGPoint) point;

/**
 *  将图片压缩至最大指定Data字节数
 *
 *  @param maxLength 指定字节数
 *
 *  @return nsdata
 */
-(NSData *) imageCompressWithDataMaxLength:(NSUInteger) maxLength;

/**
 *  图片毛玻璃算法
 *
 *  @param blur 毛玻璃等级
 *
 *  @return 毛玻璃图片，如果有错误，则直接返回本图片
 */
-(UIImage *) blurryImageWithBlurLevel:(CGFloat)blur;

///纠正图片方向
- (UIImage *)fixImageOrientation;



/// 浏览单张大图
/// @param sourceView 图片的imageView
+ (void)browserImageFromSourceView:(UIImageView *)sourceView;


/// 浏览单张大图
/// @param image 图片
/// @param sourceView 来源
+ (void)browserImage:(UIImage *)image
      fromSourceView:(UIView *)sourceView;


/// 浏览单张大图
/// @param imageUrl 图片url
/// @param sourceView 来源
+ (void)browserImageUrl:(NSString *)imageUrl
         fromSourceView:(UIView *)sourceView;


/// 浏览单张大图
/// @param image 图片
/// @param sourceView 来源view
/// @param fromController 来源vc
+ (void)browserImage:(UIImage *)image
      fromSourceView:(UIView *)sourceView
  fromViewController:(UIViewController *)fromController;


/// 浏览单张大图
/// @param imageUrl 图片Url
/// @param sourceView 来源view
/// @param fromController 来源vc
+ (void)browserImageUrl:(NSString *)imageUrl
         fromSourceView:(UIView *)sourceView
     fromViewController:(UIViewController *)fromController;

/// 浏览大图
/// @param images 图片数组（可以为UIImage或url字符串）
/// @param sourceView 图片的来源UIImageView
/// @param fromController 图片的来源VC
/// @param index 图片为数组中的第几张
+ (void)browserImages:(NSArray *)images
       fromSourceView:(UIView *)sourceView
   fromViewController:(UIViewController *)fromController
            withIndex:(NSInteger)index;
@end
